// DAO/Impl/CourseCategoryDaoImpl.java
package com.hp.DAO.Impl;                         // 实现包

import com.hp.DAO.BaseDao;                       // 基类
import com.hp.DAO.CourseCategoryDao;             // 接口：CourseCategoryDao
import com.hp.Model.CourseCategory;              // 实体：课程-分类关联
import com.hp.Util.RowMapper;                    // 行映射器
import com.hp.Util.SimpleJdbcTemplate;           // JDBC 模板

import java.util.List;                    // List

/** 课程-分类中间表的 JDBC 实现 */
public class CourseCategoryDaoImpl extends BaseDao implements CourseCategoryDao {
    public CourseCategoryDaoImpl(SimpleJdbcTemplate jdbc) { super(jdbc); } // 构造注入

    // RowMapper：ResultSet -> CourseCategory
    private static final RowMapper<CourseCategory> M = rs -> {
        CourseCategory cc = new CourseCategory();                    // 新建实体
        cc.setCourseId(rs.getLong("course_id"));                     // 课程ID
        cc.setCategoryId(rs.getLong("category_id"));                 // 分类ID
        return cc;                                                   // 返回
    };

    @Override
    public List<CourseCategory> listByCourse(Long courseId) {        // 按课程列出关联
        String sql = "SELECT course_id,category_id FROM course_category WHERE course_id=?"; // SQL
        return queryList(sql, M, courseId);                          // 执行
    }

    @Override
    public int addLink(Long courseId, Long categoryId) {             // 新增关联
        String sql = "INSERT INTO course_category (course_id,category_id) VALUES (?,?)"; // SQL
        return execUpdate(sql, courseId, categoryId);                // 执行
    }

    @Override
    public int removeLink(Long courseId, Long categoryId) {          // 删除某条关联
        String sql = "DELETE FROM course_category WHERE course_id=? AND category_id=?"; // SQL
        return execUpdate(sql, courseId, categoryId);                // 执行
    }

    @Override
    public int removeAllByCourse(Long courseId) {                    // 删除课程所有关联
        String sql = "DELETE FROM course_category WHERE course_id=?"; // SQL
        return execUpdate(sql, courseId);                            // 执行
    }
}
